package Mediadores;

import BaseDeDatos.ManejadorBD;
import GUIs.GUI_Principal;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.SQLException;
import javax.swing.JOptionPane;

/**
 *
 * @author Tinacho
 */
public class MediadorPrincipal implements ActionListener{
    
    private Connection conexion = null;
    private GUI_Principal gui_Principal = null;
    private ManejadorBD manejadorBD = null;
    
    public MediadorPrincipal(Connection c){
        this.conexion = c;
    }
    
    public void crearGuiPrincipal() throws SQLException{
        this.gui_Principal = new GUI_Principal();
        this.manejadorBD = new ManejadorBD(this.conexion);
        if(this.manejadorBD.obtenerNombrePista().compareTo("") != 0){
            // Si fue configurada la pista, se setea el titulo.
            this.gui_Principal.rellenarTituloPista(this.manejadorBD.obtenerNombrePista());
        }
        this.gui_Principal.setVisible(true);
        this.gui_Principal.setActionListeners(this);
    }
    
    
    @Override
    public void actionPerformed(ActionEvent e) {
        
        boolean opNuevoCorredor = this.gui_Principal.obtenerMI_NuevoCorredor() == e.getSource() && this.gui_Principal != null;
        boolean opEliminarCorredor = this.gui_Principal.obtenerMI_EliminarCorredor() == e.getSource() && this.gui_Principal != null;
        boolean opModificarCorredor = this.gui_Principal.obtenerMI_ModificarCorredor() == e.getSource() && this.gui_Principal != null;
        boolean opListarCorredores = this.gui_Principal.obtenerMI_ListarCorredores() == e.getSource() && this.gui_Principal != null;
        boolean opConfiguracionCochera = this.gui_Principal.obtenerMI_Configuracion() == e.getSource() && this.gui_Principal != null;

        if (opNuevoCorredor) {
            tratarAccionesAltaCorredor();
        }
        else{
            if (opEliminarCorredor) {
                tratarAccionesBajaCorredor();
            }
            else{
                if(opModificarCorredor){
                    tratarAccionesModificarCorredor();
                }
                else{
                    if(opListarCorredores){
                        tratarAccionesListadoCorredores();
                    }
                    else{
                        if(opConfiguracionCochera){
                            tratarAccionesConfiguracionCochera();
                        }
                    }                        
                }
            }
        }
    }// Fin actionPerformed
    
    
    /**
     * @brief Metodo encargado de tratar todas las acciones correspondientes
     *      al alta de un corredor.      
     */
    private void tratarAccionesAltaCorredor(){
        MediadorABM_Corredores mediadorABM = new MediadorABM_Corredores(this.conexion);
        mediadorABM.crearGUI_NuevoCorredor();
    }// Fin tratarAccionesAltaCorredor
    
    
    /**
     * @brief Metodo encargado de tratar todas las acciones correspondientes
     *      a la baja de un corredor.     
     */    
    private void tratarAccionesBajaCorredor(){
        try {
            MediadorABM_Corredores mediadorABM = new MediadorABM_Corredores(this.conexion);
            mediadorABM.crearGUI_BajaCorredor();
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null,"Se ha producido un error al crear la interfaz de eliminación de corredores.", "Error al crear interfaz", JOptionPane.ERROR_MESSAGE);
        }
    }// Fin tratarAccionesBajaCorredor
    
    
    /**
     * @brief Metodo encargado de tratar todas las acciones correspondientes
     *      a la modificacion de un corredor.     
     */      
    private void tratarAccionesModificarCorredor(){
        try{
            MediadorABM_Corredores mediadorABM = new MediadorABM_Corredores(this.conexion);
            mediadorABM.crearGUI_SeleccionAModificarCorredor();
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null,"Se ha producido un error al crear la interfaz de seleción de corredor a modificar.", "Error al crear interfaz", JOptionPane.ERROR_MESSAGE);
        }
    }// Fin tratarAccionesModificarCorredor
    
    
    /**
     * @brief Metodo encargado de tratar todas las acciones correspondientes
     *      al listado de corredores.     
     */     
    private void tratarAccionesListadoCorredores(){
        try {
            MediadorABM_Corredores mediadorABM = new MediadorABM_Corredores(this.conexion);
            mediadorABM.crearGUI_ListadoCorredores();
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null,"Se ha producido un error al crear la interfaz de listado de corredores.", "Error al crear interfaz", JOptionPane.ERROR_MESSAGE);
        }
    }// Fin tratarAccionesListadoCorredores
    
    
    /**
     * @brief Metodo encargado de tratar todas las acciones correspondientes
     *      a la configuracion de la cochera.     
     */     
    private void tratarAccionesConfiguracionCochera(){
        try {
            Mediador_InformacionPista mediadorInfoP = new Mediador_InformacionPista(this.conexion);
            mediadorInfoP.crearGui_Configuracion();
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null,"Se ha producido un error al crear la interfaz de configuración.", "Error al crear interfaz", JOptionPane.ERROR_MESSAGE);
        }        
    }// Fin tratarAccionesConfiguracionCochera
    
}
